<?php
	/** sous fonctionnalité de gestion d'une équipe
	 * @author Sebastian Mosser
	 */

class sfManagePlayers extends aSubFeature {

	public function __construct() {
		  $this->_acl = new AccessControlList(); 
      $this->_acl->setGranted(1, AccessControlList::$JUST_ME); // Entraineur
      $this->_acl->setGranted(2); // Recrutement
      $this->_acl->setGranted(3); // Secretariat
      $this->_acl->setGranted(7); // SysAdmin
		}
		
	public function check() {
	
		$idTeam = PropRetriever::getProp($_POST,"teamId");
		$perm = $this->_acl->isExposable(Login::getGroups());
		
		try {
			$aTeam = Team::read($idTeam);
		}
		catch(Exception $e) {
			$page = "<h1>Une erreur fatale est survenue ! </h1><br /> <br />"; 
			$page .= "<div align=\"center\"> <span class=\"error\">";
			$page .= 
					"L'équipe d'identifiant Balloon <code>[$idTeam]</code> n'éxiste pas!";
			return $page;
		}

		if ($perm == AccessControlList::$JUST_ME) {
			if (! $aTeam->canEdit(Login::getLoginId())) {
				$page = <<<EOS
<h1> Une erreur est survenue ! </h1>
<div align="center">
<p> <span class="error">Vous n'êtes pas autorisé a faire des modifications dans cette équipe car vous n'en êtes pas l'administrateur.</span></p>
</div>
<p> Si vous pensez qu'il s'agit d'une erreur, contactez le secrétariat du club qui pourra vous autoriser à y acceder.</p>
<p> Pour pouvoir modifier une équipe, vous devez être déclaré : 
<ul>
  <li> Administrateur de l'équipe </li>
  <li> Administrateur de catégorie </li>
  <li> Membre du groupe <code> Secretariat </li>
  <li> Membre du groupe <code> Recrutement </code> </li>
  <li> Membre du groupe <code> Administrateur Système </code> </li>
</ul>
EOS;
				return $page;
			}
			
		}
		return True;
	
	}

	protected function run() {
		// Test d'accès		
		$test = $this->check();
		if ($test !== True)
			return $test;
			
		$idTeam    = PropRetriever::getProp($_POST,"teamId");	
		$aTeam = Team::read($idTeam);
		switch (PropRetriever::getProp($_POST,"action")) {
			case "add":
				return $this->addPlayer($aTeam);
			case "edit":
				return $this->editPlayer($aTeam);
			case "delete":
				return $this->delPlayer($aTeam);
			default:
				return ($this->displayForm($aTeam) . $this->displayPlayers($aTeam));	
		}
	}

	private function addPlayer($team) {
		$licence = PropRetriever::getProp($_POST,"licence");
		$role    = PropRetriever::getProp($_POST,"role");
		
		if ($licence == "") {
			$errors = "Le numéro de licence ne peut pas être vide !";
			return $this->displayForm($team,$errors) . $this->displayPlayers($team);
		}
		
		$playerId = Member::getOnLicence($licence);
		if ($playerId == -1 or $playerId == "") {
			$errors = "Le numéro de licence ne correspond à aucun adhérent !";
			return $this->displayForm($team,$errors) . $this->displayPlayers($team);
		}
		
		
		
		$player = Member::read($playerId);
		$playerText = $player->displayName();
		$team->addPlayer($playerId,$role);
		$team->update();
		
		$result  = $this->displayForm($team);
		$result .= <<<EOS
<br />
<div align="center">
<p> <span class="error"> Joueur ${playerText} ajouté avec succès ! </span> </p>
</div>
EOS;
		$result .= $this->displayPlayers($team);
		return $result;
	}

	private function editPlayer($team) {
		$playerId     = PropRetriever::getProp($_POST,"playerId");
		$playerRole   = PropRetriever::getProp($_POST,"playerRole");
		$team->addPlayer($playerId,$playerRole);
		$team->update();
		$result  = $this->displayForm($team);
		$result .= <<<EOS
<br />
<div align="center">
<p> <span class="error"> Modification effectuée avec succès ! </span> </p>
</div>
EOS;
		$result .= $this->displayPlayers($team);
		return $result;
	
	}

	private function delPlayer($team) {
		$playerId     = PropRetriever::getProp($_POST,"playerId");
		$team->delPlayer($playerId);
		$team->update();
		$result  = $this->displayForm($team);
		$result .= <<<EOS
<br />
<div align="center">
<p> <span class="error"> Suppression effectuée avec succès ! </span> </p>
</div>
EOS;
		$result .= $this->displayPlayers($team);
		return $result;
	
	}

	private function displayForm($aTeam, $errors = "") {
		$idTeam    = PropRetriever::getProp($_POST,"teamId");
		$licenceNo = PropRetriever::getProp($_POST,"licence");
		$role      = PropRetriever::getProp($_POST,"role");
		
		$roleOptions = Team::getRolesAsList($role);
		
		$licenceStyle = ""; $errorsText = ""; 
		if ($errors != "") {
			$licenceStyle = "class=\"error\"";
			$errorsText  = "<h2> Une erreur est survenue </h2>";
			$errorsText .= "<div align=\"center\"><span class=\"error\">";
			$errorsText .= $errors . "</span> </div>";
		}
    
		$page = "";
		$teamName = $aTeam->displayShort();

		$page = "<h1> Gestion des joueurs de l'équipe $teamName </h1>";
		$page .= fManageTeams::getReturnButton($idTeam);
		
		$page  .= <<<EOS
<h1> Ajouter un joueur permanent </h1>

<div align="center">
<form method="post">
	<input type="hidden" name="teamId" value="${idTeam}" />
	<input type="hidden" name="action" value="add" /> 
	
	<fieldset>
		<legend> Ajouter un Joueur</legend>
		<br />
		
		<label> 
			<span ${licenceStyle}> Licence : </span>
			<input type="text" name="licence" class="edit" value="${licenceNo}"/>
			&nbsp; &nbsp;
		</label>
		<br />		
		
		<label> 
			<span> Poste : </span>
			<select name="role" class="edit" />
			${roleOptions}
			</select>
			&nbsp; &nbsp;
		</label>
		<br />
		<input type="submit" value="Ajouter à l'équipe" class="edit" />
		<br /> <br />
	</fieldset>
</form>
</div>
${errorsText}
EOS;
		return $page;
	}
	
	private function displayPlayers($aTeam) {

		$idTeam    = PropRetriever::getProp($_POST,"teamId");		
		$page = "<h1> Joueurs présents dans l'équipe </h1>";
		
		$players = $aTeam->getPlayers();
		if (count($players) == 0) {
			$page .= <<<EOS
<div align="center">
  <p>
    <span class="error"> 
      Aucun joueur présent actuellement dans l'équipe ! 
		</span> 
	</p>
</div> 
EOS;
		}
		else {
			$header  = " <div align=\"center\"><table class=\"resultset\">";
			$header .= " <tr> <th> Licence </th> <th> Nom complet </th> ";
			$header .= " <th> Date de Naissance </th> <th> Rôle </th> ";
			$header .= " <th colspan=\"2\"> Actions Disponibles </th> </tr>"; 
			
			$footer = "</table> </div>";
			
			$content = "";
			foreach($players as $k => $v) {
				
				$aPlayer = Member::read($k);
				$playerData = $aPlayer->displayInline();
				$roles = Team::getRolesAsList($v);
				
				$content .= <<<EOS
<tr>
	<!-- données du joueur -->
  ${playerData}
  
  <!-- formulaire de modification -->
	<form method="post" action="#${k}">
		<input type="hidden" name="teamId"   value="${idTeam}" />
		<input type="hidden" name="playerId" value="${k}"      />
		<input type="hidden" name="action"   value="edit"      />
		<td id="${k}">
			<select name="playerRole" class="edit"> ${roles} </select>
		</td>
		<td>
			<input class="edit" type="submit" value="Modifier" />
		</td>
	</form>
		
	<!-- Formulaire de suppression -->
	<form method="post" >
		<input type="hidden" name="teamId"   value="${idTeam}" />
		<input type="hidden" name="playerId" value="${k}"      />
		<input type="hidden" name="action"   value="delete"    />
		<td>
			<input class="edit" type="submit" value="Supprimer"  />
		</td>
	</form>
</tr>
EOS;
			}
			$page .= $header . $content . $footer;
		}
			
		return $page;
	}
	
}

?>